package model

import (
	"time"

	"gorm.io/gorm"
)

// 枚举类型定义
type SexType string

const (
	SexTypeMan     SexType = "man"
	SexTypeWoman   SexType = "woman"
	SexTypeUnknown SexType = "unknown"
)

type UserRoleType string

const (
	UserRoleTypeDefault UserRoleType = "default"
	UserRoleTypeAdmin   UserRoleType = "admin"
	UserRoleTypeVip     UserRoleType = "vip"
)

type UserStatusType string

const (
	UserStatusTypeEnable  UserStatusType = "enable"
	UserStatusTypeDisable UserStatusType = "disable"
)

// User 用户
type User struct {
	Id          int64          `json:"id" gorm:"primaryKey;autoIncrement;comment:用户id" `                                                             // 用户id
	UserName    string         `json:"user_name" gorm:"type:varchar(48);not null;default:'普通用户';comment:用户名" `                                       // 用户名
	UserAvatar  string         `json:"user_avatar" gorm:"type:varchar(120);not null;default:'default_assets/default_user_avatar.jpg';comment:用户头像" ` // 用户头像
	Sex         SexType        `json:"sex" gorm:"type:enum('man','woman','unknown');not null;default:'unknown';comment:性别" `                         // 性别
	Birthday    *time.Time     `json:"birthday" gorm:"comment:生日" `                                                                                  // 生日
	Age         *int64         `json:"age" gorm:"type:tinyint;comment:年龄" `                                                                          // 年龄
	Account     string         `json:"account" gorm:"type:varchar(48);not null;comment:账号" `                                                         // 账号
	SelfAccount string         `json:"self_account" gorm:"type:varchar(48);not null;comment:自定义账号" `                                                 // 自定义账号
	UserRole    UserRoleType   `json:"user_role" gorm:"type:enum('default','admin','vip');not null;default:'default';comment:用户权限" `                 // 用户权限
	Password    string         `json:"-" gorm:"type:varchar(64);not null;comment:用户密码" `                                                             // 用户密码
	UserStatus  UserStatusType `json:"user_status" gorm:"type:enum('enable','disable');not null;default:'enable';comment:用户状态" `                     // 用户状态
	CreateBy    *int64         `json:"create_by" gorm:"type:int;comment:创建者id" `                                                                     // 创建者id
	UpdateBy    *int64         `json:"update_by" gorm:"type:int;comment:修改者id" `                                                                     // 修改者id
	CreateTime  time.Time      `json:"create_time" gorm:"not null;autoCreateTime;comment:创建时间" `                                                     // 创建时间
	UpdateTime  time.Time      `json:"update_time" gorm:"not null;autoUpdateTime;comment:更新时间" `                                                     // 更新时间
	DeleteTime  gorm.DeletedAt `json:"delete_time" gorm:"index;comment:删除时间" swaggerignore:"true"`                                                   // 删除时间
}

// TableName 指定表名
func (User) TableName() string {
	return "user"
}
